iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
自我挑戰組

Python Discord Bot(DC機器人)系列 第 9

Python Discord Bot#9 - Commands 命令

  • 分享至 

  • xImage
  •  

前篇介紹 Slash Commands 而不是 Commands ,
是因為在實作時無法執行成功,
所以本來想直接用
@client.event 的on_message 直接做掉就好,
但是在這個假日整理與實作時,
發現了問題點後,
決定補發。

以下直接上路!!

Commands

於文字頻道直接打命令後,就可以互動的方式
https://ithelp.ithome.com.tw/upload/images/20230909/201060716Ai1UWdNYe.png

在許多的範例檔案,
有人可能看過 command_prefix

範例: 
client = commands.Bot(command_prefix='$', intents=intents)

意思是指定"$"為觸發命令的方式,
而在註冊命令時,自動 $[命令名稱]後及可觸發功能,
所以您可以自己隨意選擇想要的前綴。

如何註冊?

首先 註冊前綴 像上面的範例一樣,
官方是建議不要使用""空字符來當前綴,
可能會有用,但需要避免。
而後,註冊命令有兩種方式:
詳細在pycord文檔有,
下面我就直接引入了。

第一個方式

from discord.ext import commands

bot = commands.Bot(command_prefix='$')
@bot.command()
async def test(ctx):
    pass
    
@client.event
async def on_message(message):
	if message.author == client.user:  # 排除機器人本身的訊息
		return
	await client.process_commands(message) # 需要加這個 文檔未填寫

第二個方式

from discord.ext import commands

bot = commands.Bot(command_prefix='$')

@commands.command()
async def test(ctx):
    pass

bot.add_command(test)

小實作

import os
import discord
from discord.ext import commands
from dotenv import load_dotenv

# 取得環境設定
load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
# intents
intents = discord.Intents.default()
intents.message_content = True
# client
client = commands.Bot(command_prefix='$', intents=intents)

@client.event
async def on_message(message):
	if message.author == client.user:  # 排除機器人本身的訊息
		return
	await client.process_commands(message)

@client.command()
async def hello(ctx, message: str=""):
	await ctx.send(f"您好w {'您說了' + message if message else ''}")

@commands.command()
async def test(ctx):
	await ctx.send('test')

client.add_command(test)
				
client.run(DISCORD_TOKEN)

https://ithelp.ithome.com.tw/upload/images/20230909/20106071YVgtFZoe6Y.png

原本在dicord.py 版本或是很多人的實例當中,
雖然直接@client.command() 卻完全沒有註冊成功,
但也沒有錯誤訊息,
而以為它已經不能運作了,
結果是需要 process_commands
這個功能是方便 你直接註冊命令,
而不需要直接在on_message之中一個一個判斷,
當然,你也可以暴力寫,
但明明有擴展套件為何不用呢?

p.s 而這個功能無法在伺服器設定>應用程式>整合 查看。


上一篇
Python Discord Bot#8 - Slash Commands 斜線命令處理
下一篇
Python Discord Bot#10 - User Commands 成員指令
系列文
Python Discord Bot(DC機器人)31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言